跳到主要内容

Docker CLI 命令速查

这篇速查手册收录日常运维中最常用的 Docker CLI 命令,按镜像、容器、数据卷、网络、系统和 Compose 分类整理,方便随用随查。

文中 镜像名、容器名、卷名 等均为占位符,实际使用时替换成自己的名称即可。

镜像命令​

命令作用示例
docker pull从仓库拉取镜像docker pull nginx:1.27
docker images列出本地镜像docker images nginx
docker build根据 Dockerfile 构建镜像docker build -t myapp:1.0 .
docker tag给已有镜像打新标签docker tag myapp:1.0 user/myapp:1.0
docker push推送镜像到仓库docker push user/myapp:1.0
docker rmi删除本地镜像docker rmi myapp:1.0
docker save导出镜像为 tar 包docker save -o nginx.tar nginx:1.27
docker load从 tar 包导入镜像docker load -i nginx.tar
docker history查看镜像分层历史docker history nginx:1.27
docker image inspect查看镜像详细配置docker image inspect nginx:1.27
docker image prune清理悬空镜像docker image prune
docker search在 Docker Hub 搜索镜像docker search nginx

拉取、打标签、推送私有仓库的完整流程:

docker pull nginx:1.27
docker tag nginx:1.27 registry.example.com/web/nginx:1.27
docker push registry.example.com/web/nginx:1.27
什么是悬空镜像

重新构建同名镜像后,旧镜像的 tag 被新镜像占用,旧镜像变成无标签的悬空镜像(dangling),列表里显示为 <none>。docker image prune 只清理这类镜像;加 -a 会连未被任何容器使用的镜像一起删除。

跨平台构建

需要构建 ARM/AMD 多架构镜像时使用 buildx:docker buildx build --platform linux/amd64,linux/arm64 -t user/myapp:1.0 .

容器命令​

命令作用示例
docker run创建并启动容器docker run -d --name web -p 8080:80 nginx
docker ps列出容器,加 -a 显示已停止的docker ps -a
docker stop停止容器,先发 SIGTERMdocker stop web
docker start启动已停止的容器docker start web
docker restart重启容器docker restart web
docker kill强制停止容器,直接发 SIGKILLdocker kill web
docker rm删除容器,加 -f 强制删除运行中的docker rm -f web
docker exec在运行中的容器里执行命令docker exec -it web bash
docker logs查看容器日志docker logs -f --tail 100 web
docker inspect查看容器详细信息docker inspect web
docker stats实时查看容器资源占用docker stats
docker top查看容器内进程docker top web
docker cp容器与宿主机之间复制文件docker cp web:/etc/nginx/nginx.conf .
docker update更新运行中容器的配置docker update --restart unless-stopped web
docker rename重命名容器docker rename web web-old
docker pause暂停容器进程docker pause web
docker unpause恢复被暂停的容器docker unpause web
docker port查看容器端口映射docker port web
docker diff查看容器相对镜像的文件变更docker diff web

查看日志和进入容器是排查问题的两件套:

# 实时跟踪最近 100 行日志
docker logs -f --tail 100 web

# 进入容器排查(无 bash 的镜像改用 sh)
docker exec -it web bash

docker run 常用参数​

参数作用示例
-d后台运行(detach)docker run -d nginx
-it交互模式并分配伪终端,常组合使用docker run -it busybox sh
--name指定容器名称--name web
-p端口映射,格式为 宿主机端口:容器端口-p 8080:80
-P将镜像声明的端口随机映射到宿主机-P
-v挂载数据卷或宿主机目录-v web-html:/usr/share/nginx/html
--mount显式声明挂载,比 -v 更可读--mount type=bind,src=/data,dst=/data
-e设置环境变量-e TZ=Asia/Shanghai
--env-file从文件批量读取环境变量--env-file .env
--restart设置重启策略--restart unless-stopped
--network指定加入的网络--network frontend
--rm容器退出后自动删除,适合一次性任务--rm
--memory限制内存--memory 512m
--cpus限制 CPU 核数--cpus 1.5
-u以指定用户身份运行-u 1000:1000
-w设置容器内工作目录-w /app
--hostname设置容器主机名--hostname web01
--add-host向容器 hosts 文件追加记录--add-host db.local:192.168.1.10
--read-only根文件系统只读--read-only
--entrypoint覆盖镜像的入口命令--entrypoint sh
--privileged特权模式,授予全部宿主机能力,慎用--privileged

--restart 支持四种策略:

策略含义
no不自动重启(默认)
on-failure仅异常退出时重启,可限制次数,如 on-failure:3
always无论退出状态都重启,Docker 守护进程启动时也会拉起
unless-stopped与 always 类似,但手动 stop 过的容器不再随守护进程启动

一个带齐常用参数的实际例子:

docker run -d \
--name web \
-p 8080:80 \
-v web-html:/usr/share/nginx/html \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
--network frontend \
nginx:1.27
--rm 与 --restart 不要一起用

--rm 表示退出即删除,--restart 表示退出后重启,两者语义冲突,Docker 会直接报错。临时调试用 --rm,长期服务用 --restart。

数据卷命令​

命令作用示例
docker volume create创建数据卷docker volume create db-data
docker volume ls列出数据卷docker volume ls
docker volume inspect查看数据卷详情(含宿主机目录)docker volume inspect db-data
docker volume rm删除数据卷docker volume rm db-data
docker volume prune清理未被任何容器使用的数据卷docker volume prune
删除容器不会自动删除数据卷

即使容器被删除,它挂载的命名卷依然保留,数据不会丢。若确实想连同卷一起删除,用 docker rm -v 容器名。docker volume prune 清理前请确认卷里没有还需要的数据。

网络命令​

命令作用示例
docker network create创建网络docker network create frontend
docker network ls列出网络docker network ls
docker network inspect查看网络详情(含接入的容器)docker network inspect frontend
docker network connect把运行中的容器接入网络docker network connect frontend web
docker network disconnect把容器从网络中断开docker network disconnect frontend web
docker network rm删除网络docker network rm frontend
docker network prune清理未被容器使用的网络docker network prune

同一自定义网络内的容器可以直接用容器名互相访问:

docker network create app-net
docker run -d --name db --network app-net -e POSTGRES_PASSWORD=secret postgres:16
docker run -d --name api --network app-net -p 8080:8080 myapp:1.0
# api 容器内可以直接通过主机名 db 访问数据库

系统命令​

命令作用示例
docker version查看客户端与服务端版本docker version
docker info查看引擎信息(存储驱动、资源等)docker info
docker system df查看各类资源的磁盘占用docker system df -v
docker system prune一键清理未使用的资源docker system prune
docker system events实时查看 Docker 事件流docker system events

docker system prune 的常用变体:

# 清理停止的容器、未使用的网络、悬空镜像和构建缓存
docker system prune

# 连未被容器使用的镜像也一起清理
docker system prune -a

# 再连未使用的数据卷也一起清理(最激进)
docker system prune -a --volumes
prune 之前想清楚

docker system prune -a --volumes 会删除所有未被容器引用的镜像和数据卷,删错不可恢复。生产环境建议先用 docker system df -v 确认占用情况,再按需选择清理范围。

Compose 命令​

Docker Compose v2 已作为 Docker 的子命令内置,格式是 docker compose(中间是空格),不是旧版的 docker-compose(连字符)。

命令作用示例
docker compose up创建并启动全部服务,加 -d 后台运行docker compose up -d
docker compose down停止并删除容器和网络docker compose down
docker compose ps查看各服务状态docker compose ps
docker compose logs查看服务日志docker compose logs -f app
docker compose start启动已停止的服务docker compose start
docker compose stop停止服务但不删除docker compose stop
docker compose restart重启服务docker compose restart app
docker compose exec在服务容器内执行命令docker compose exec app bash
docker compose build重新构建服务的镜像docker compose build app
docker compose pull拉取服务依赖的镜像docker compose pull
docker compose config校验并输出最终生效的配置docker compose config

日常操作流程:

# 启动全部服务(后台)
docker compose up -d

# 跟踪 app 服务的日志
docker compose logs -f app

# 改动代码后重新构建并启动
docker compose up -d --build app

# 停止并清理(加 -v 连数据卷一起删)
docker compose down
指定配置文件与项目名

多环境部署时可以用 -f 指定 compose 文件、-p 指定项目名:docker compose -f compose.prod.yaml -p myapp up -d。项目名决定了容器、网络等资源名前缀,不同项目名的栈互不影响。